package com.lynn.common.utils

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import com.lynn.common.utils.spf.LocalCacheUtil
import java.util.Locale

/**
 * @description: 多语言工具类：负责更改应用的语言并更新界面
 * @author: bailing
 * @datetime: 2025/5/30 13:54
 **/

object LocaleHelper {
    /**
     * 1、从缓存中读取语言：
     *     如果为空，则设置为系统默认语言；
     *     否则为设置的语言
     * 2、设置应用语言
     */
    fun updateOnAppStart(context: Context) {
        var language = LocalCacheUtil.language
        // 设置语言
        setLocale(context, language)
    }

    /**
     * 应用内手动更换语言：
     *   1、从缓存中读取语言：
     *      1.1 如果与目标语言不一致：
     *          1.1.1: 更新缓存，设置为目标语言
     *          1.1.2: 设置应用语言
     *          1.1.3: 重新启动活动以应用语言更改
     *      1.2 如果一致：根据需求做出提示等
     */
    fun updateOnManual(activity: Activity, languageCode: String) {
        var language = LocalCacheUtil.language
        if (languageCode !== language) {
            // 保存到文件中
            LocalCacheUtil.language = languageCode
            // 设置语言
            setLocale(activity, languageCode)
            // 重新启动活动以应用语言更改
            restartActivity(activity);

        }
    }

    private fun restartActivity(activity: Activity) {
        val intent: Intent? = activity.intent
        activity.finish()
        activity.startActivity(intent)
    }

    /**
     * 核心功能：设置语言
     */
    private fun setLocale(context: Context, languageCode: String?) {
        if (languageCode.isNullOrEmpty()) {
            return
        }

        val locale = Locale(languageCode)
        //  用于为JVM设置默认的语言环境，不会影响操作系统的全局语言环境，它仅影响应用程序内部的语言环境‌
        Locale.setDefault(locale)
        // 获取配置
        val config: Configuration = context.resources.configuration
        // API 17 及以上，更改配置语言
        config.setLocale(locale)
        context.createConfigurationContext(config)
//        context.resources
//            .updateConfiguration(config, context.getResources().getDisplayMetrics()) 过时
    }
}